package main

import (
	"flag"
	"fmt"
	"modeltools/dbtools"
	"modeltools/generate"
	"modeltools/param"
	"os"
	"strings"
	"time"
)

func init() {
	flag.StringVar(&param.C.Host, "h", "", "-h 127.0.0.1")
	flag.StringVar(&param.C.Port, "P", "3306", "-P 3306")
	flag.StringVar(&param.C.User, "u", "", "-u 用户名")
	flag.StringVar(&param.C.Pwd, "p", "", "-p 密码")
	flag.StringVar(&param.C.Db, "d", "", "-d 数据库名")
	flag.StringVar(&param.C.Table, "t", "", "-t 数据表名")
	flag.StringVar(&param.C.ModelsPaht, "m", "./", "-m 模型生成目标目录")
	flag.StringVar(&param.C.ModelReplaceStr, "r", "true", "-r 已存在模型是否覆盖")
}

func usage() {
	fmt.Fprintf(os.Stderr, `请输入相关参数
-h	数据地址[必须]
-P	数据端口[默认-3306]
-u	用户名[必须]
-p	密码[默认-空]
-d	数据库名[必须]
-t	表名[默认-所有  多个用',']
-m	模型生成目录[默认-当前目录]
-r	已存在模型是否覆盖[默认-true]
	`)
}

func main() {
	t := time.Now()
	flag.Parse()
	if param.C.Host == "" || param.C.User == "" || param.C.Db == "" {
		usage()
		return
	}
	if param.C.Table != "" {
		if strings.Contains(param.C.Table, ",") || strings.Contains(param.C.Table, "，") {
			table := strings.ReplaceAll(param.C.Table, "，", ",")
			param.C.Tables = strings.Split(table, ",")
		} else {
			param.C.Tables = append(param.C.Tables, param.C.Table)
		}
	}
	if param.C.ModelReplaceStr == "true" {
		param.C.ModelReplace = true
	} else {
		param.C.ModelReplace = false
	}
	//初始化数据库
	dbtools.Init()
	if len(param.C.Tables) > 0 {
		generate.Genertate(param.C.Tables...) //生成指定表信息，可变参数可传入多个表名
	} else {
		generate.Genertate() //生成所有表信息
	}
	fmt.Println("SUCCESS!")
	since := time.Since(t)
	fmt.Println("耗时:", since)
}
